package com.hua.designpattern.behavioral.command;

/**
 * 
 * @author joshua
 *
 *         <pre>
 *
 *  通常行为请求者与行为实现者是一种紧耦合的关系,两者直接关联。
 *  通过命令模式可以实现解耦,将请求者的请求统一接口(CommandInterface)封装成对象(CommandAdd/CommandUpdate/CommandDelete),
 *  并存放在接受者(CommandBag)中， 发完请求后，由接受者执行请求。
 *  
 *  角色
 *  	 抽象命令（CommandInterface）：定义命令的接口，声明执行的方法。
 *  	具体命令（CommandAdd/CommandUpdate/CommandDelete）：具体命令，实现要执行的方法，它通常是“虚”的实现；通常会有接收者，并调用接收者的功能来完成命令要执行的操作。
 *  	接收者（CommandBag）：真正执行命令的对象。任何类都可能成为一个接收者，只要能实现命令要求实现的相应功能。
 * 
 *  优点： 1、降低了系统耦合度。 2、新的命令可以很容易添加到系统中去。3、可以干涉命令的执行过程。
 *  缺点：使用命令模式可能会导致某些系统有过多的具体命令类。
 * 
 *         </pre>
 *
 */
public class TestCommand {
	public static void main(String[] args) {
		CommandBag commandBag = new CommandBag();
		EditConcrete concrete = new EditConcrete();
		commandBag.doEdit(new CommandUpdate(concrete));
		commandBag.doEdit(new CommandUpdate(concrete));
		commandBag.doEdit(new CommandUpdate(concrete));
		commandBag.doEdit(new CommandUpdate(concrete));
		commandBag.revokeLast();
		commandBag.revokeLast();
		commandBag.doEdit(new CommandAdd(concrete));
		commandBag.doEdit(new CommandAdd(concrete));
		commandBag.doEdit(new CommandDelete(concrete));
		commandBag.doEdit(new CommandDelete(concrete));
		commandBag.revokeLast();
		commandBag.doEdit(new CommandDelete(concrete));
		commandBag.doSubmit();
	}
}
